In computer science, a virtual machine (VM) is a portion of software that, when executed on appropriate hardware, creates an environment allowing the virtualization of an actual physical computer system. Each VM may function as a self-contained platform, running its own operating system (OS) and software applications (processes). Typically, a virtual machine monitor (VMM) manages allocation and virtualization of computer resources and performs context switching, as may be necessary, to cycle between various VMs.
A host machine (e.g., computer or server) is typically enabled to simultaneously run multiple VMs, where each VM may be used by a remote client. The host machine allocates a certain amount of the host's resources to each of the VMs. Each VM is then able to use the allocated resources to execute applications, including operating systems known as guest operating systems. The VMM virtualizes the underlying hardware of the host machine or emulates hardware devices, making the use of the VM transparent to the guest operating system or the remote client that uses the VM.
Recently, solutions providing centralized hosting for VMs that run (virtual) desktops have been developed. Such solutions consist of centralized servers that are partitioned into multiple VMs that host the virtual desktops, thereby providing a desktop for each user. The centralized hosting provides the manageability of sever-based computing, while the dedicated environment provides the flexibility and compatibility with applications that a desktop enables. In general, VMs therefore enable remote access to a host or server computer by a remote client computer, which mimics or reconstructs the events taking place on the host computer.
However, one problem that arises with such centralized hosting of VMs is that each VM hosted by a centralized server expects to maintain control over address-translation operations and have to ability to allocate physical memory, provide protection from and between guest applications, use a variety of paging techniques, and so on. Yet, in the virtualized environment of centralized hosting of VMs, the VMM should be able to have ultimate control over the server's resources to provide protection from and between the VMs.
Mechanisms exist that allow each guest VM to control address translation while enabling the VMM to retain ultimate control over address translation and computer resources accessed by the guest VMs. The VMM has its own virtual memory management unit (MMU) implementation to provide translation services between the guest VMs and the server's own physical hardware MMU implementation. The complexity of managing the many layers of address translation is time and resource consuming. For instance, each VM may update its page table hierarchy frequently. These updates should be reflected at the VMM in its MMU implementation. Yet, requiring the VMM MMU implementation to synchronize each page update performed by each VM at the moment the update takes place is burdensome and creates large overhead costs, as there are many updates to be tracked.
As such, a mechanism to support and streamline the VMM's MMU implementation in providing translation services between guest VMs and the host physical MMU implementation would be beneficial.